package bean;

import java.util.Date;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import psc.model.base.acesso.Cliente;
import psc.model.base.cliente.Conta;
import psc.model.base.transacao.Liberacao;
import psc.model.base.transacao.Transferencia;
import util.Constantes;
import facade.FacadeAgencia;
import facade.FacadeBanco;
import facade.FacadeConta;
import facade.FacadeTipoLiberacao;
import facade.FacadeTransferencia;

@ManagedBean
@SessionScoped
public class TransferenciaBean {

	public TransferenciaBean() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) facesContext.getExternalContext()
				.getSession(false);

		Cliente cliente = (Cliente) session.getAttribute("usuario");

		Conta conta = new Conta();
		conta.setCliente(cliente);

		liberacao1 = new Liberacao();
		liberacao1.setDirecao(Constantes.liberacaoDirecao.Saida);
		liberacao1.setTipoLiberacao(facadeTipoLiberacao.getTipoContaCorrente());
		Conta contaAux = facadeConta.consultarConta(conta);
		liberacao1.setConta(contaAux);
		liberacao1.setAgencia(contaAux.getAgencia());

		liberacao1.setBanco(new FacadeAgencia().consultarAgencia(
				contaAux.getAgencia()).getBanco());

		liberacao1.setDataLiberacao(new Date());

		liberacao2 = new Liberacao();
		liberacao2.setDirecao(Constantes.liberacaoDirecao.Entrada);
		liberacao2.setTipoLiberacao(facadeTipoLiberacao.getTipoContaCorrente());
		liberacao2.setDataLiberacao(new Date());

	}

	private Transferencia transferencia = new Transferencia();

	private String mensagem;

	public Transferencia getTransferencia() {
		return transferencia;
	}

	public void setTransferencia(Transferencia transferencia) {
		this.transferencia = transferencia;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	FacadeTransferencia facadeTransferencia = new FacadeTransferencia();
	FacadeTipoLiberacao facadeTipoLiberacao = new FacadeTipoLiberacao();
	FacadeConta facadeConta = new FacadeConta();
	private Liberacao liberacao1;

	public Liberacao getLiberacao1() {
		return liberacao1;
	}

	private Liberacao liberacao2;

	public Liberacao getLiberacao2() {
		return liberacao2;
	}

	public void setLiberacao2(Liberacao liberacao2) {
		this.liberacao2 = liberacao2;
	}

	public void setLiberacao1(Liberacao liberacao1) {
		this.liberacao1 = liberacao1;
	}

	public void RealizarTransferencia() {
		try {
			liberacao1.setValor(liberacao2.getValor());

			liberacao2.setConta(new FacadeConta().consultarConta(liberacao2
					.getConta()));

			liberacao2.setAgencia(new FacadeAgencia()
					.consultarAgencia(liberacao2.getAgencia()));

			liberacao2.setBanco(new FacadeBanco().consultarBanco(liberacao2
					.getBanco()));

			transferencia.getLiberacoes().add(liberacao1);
			transferencia.getLiberacoes().add(liberacao2);

			facadeTransferencia.realizarTransferencia(transferencia);
			mensagem = "Transferencia realizada com sucesso!";
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			mensagem = e.getMessage();
		}
	}
}
